import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import LabelEncoder

# 读取数据
df = pd.read_csv('insurance.csv')

# 对字符串类型的特征进行编码
labelencoder = LabelEncoder()
df['sex'] = labelencoder.fit_transform(df['sex'])
df['smoker'] = labelencoder.fit_transform(df['smoker'])
df['region'] = labelencoder.fit_transform(df['region'])

# 使用seaborn的pairplot函数可以绘制出对角线上是分布情况，非对角线上是两两特征之间的关系
g = sns.pairplot(df, vars=["age", "bmi", "children", "charges"], hue="smoker")

# 为了更准确地查看相关性，可以利用pandas的corr()函数计算数值型变量之间的Pearson相关系数
correlation_matrix = df.corr()
print(correlation_matrix)

# 另外，我们可以使用heatmap图形展示Pearson相关系数
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.show()